#include "hzpch.h"
#include "SubTexture2D.h"

namespace Hazal
{
	CSubTexture2D::CSubTexture2D(const Ref<CTexture2D>& rTexture, float fUnitSize, const glm::vec2& vecMin, const glm::vec2& vecMax)
		:m_pTexture(rTexture), m_fUnitSize(fUnitSize)
	{
		m_aVecTexCoords[0] = { vecMin.x, vecMin.y };
		m_aVecTexCoords[1] = { vecMax.x, vecMin.y };
		m_aVecTexCoords[2] = { vecMax.x, vecMax.y };
		m_aVecTexCoords[3] = { vecMin.x, vecMax.y };
	}

	void CSubTexture2D::CalcTexCoord(const glm::vec2& vecCoordsIdx, const glm::vec2& vecSpriteSize)
	{
		glm::vec2 vecMin = { (vecCoordsIdx.x * m_fUnitSize) / m_pTexture->GetWidth(), (vecCoordsIdx.y * m_fUnitSize) / m_pTexture->GetHeight() };
		glm::vec2 vecMax = { (vecCoordsIdx.x + vecSpriteSize.x) * m_fUnitSize / m_pTexture->GetWidth(), (vecCoordsIdx.y + vecSpriteSize.y) * m_fUnitSize / m_pTexture->GetHeight() };

		m_aVecTexCoords[0] = { vecMin.x, vecMin.y };
		m_aVecTexCoords[1] = { vecMax.x, vecMin.y };
		m_aVecTexCoords[2] = { vecMax.x, vecMax.y };
		m_aVecTexCoords[3] = { vecMin.x, vecMax.y };
	}

	Ref<CSubTexture2D> CSubTexture2D::CreateFromCoords(const Ref<CTexture2D>& rTexture, float fUnitSize, const glm::vec2& vecCoordsIdx, const glm::vec2& vecSpriteSize)
	{
		glm::vec2 vecMin = { (vecCoordsIdx.x * fUnitSize) / rTexture->GetWidth(), (vecCoordsIdx.y * fUnitSize) / rTexture->GetHeight() };
		glm::vec2 vecMax = { (vecCoordsIdx.x + vecSpriteSize.x) * fUnitSize / rTexture->GetWidth(), (vecCoordsIdx.y + vecSpriteSize.y) * fUnitSize / rTexture->GetHeight() };

		return  CreateRef<CSubTexture2D>(rTexture, fUnitSize, vecMin, vecMax);
	}
}